在昨天的文章中,談到了我們如何用梯度下降法,來找到 Loss Function 的最低點。方法看似簡單(希望被我講得真的很簡單),但實際上執行的時候,可能會遭遇到一些問題。
在梯度下降法當中,我們下降的速度(與方向)是跟依據這個式子:
你可能會想說,要快點達到目的地的話,不如我們就把 (代表學習速度)的值設定大一點,讓我們每一次都走大步一點吧。但這樣可能會造成 overshotting(如下圖左邊),反而造成達到最低點的速度變慢。就像是
好吧,既然把 調大可能有麻煩,那不然就把它調的小一點吧,但這樣一來,我們可能要走非常多步,才能找到那個最低點(如下圖右邊),這樣不僅耗時也耗資源(機器也是要吃電才能跑的啊!)
(圖片來源)
那麼什麼樣的 才是最好的呢?其實沒有人知道,因為沒有人知道我們要走出的山谷長什麼樣子。絕對不是像昨天或上面的 U 字型這麼簡單,如果處理到真正的問題,將會有更多的維度,情況也就更加複雜。
在機器學習裡面,有一些不同的方法與技巧,讓 的值隨著狀況不斷變化,增加我們到達最低點的機率與速度。
更讓人摸不著頭緒的是,我們的第一步要從哪裡開始?在同一片山谷當中,即便我們用同一套方法帶領我們往前走,但是很有可能起始的點不同,會帶我們到不同的地方去。就像下面這張圖,三個不同的起始點,會帶我們到三個不同的 local minimum
(圖片來源)
還記得昨天的文章提到
如果我們真的幸運達到最低點了,那麼這個最低點的梯度將會是 0,也就是說,我們將不會再踏出任何一步。
但正確來說,我們只要達到斜率等於零的地方,我們就不會再踏出任何一步。斜率等於零的狀況有以下幾種
因為我們不是神,所以不會知道我們在的地方,是「極小值」還是只是「區域極小值」,或者,其實我們根本就站在其他地方。
要找到更小的 Loss function 的值,其實就是一個不斷優化的過程。這個過程沒有終點,只能夠憑著對於該問題的經驗,以及不斷實驗的精神,一步步的向前進。也難怪有人說這是一門藝術。
不知道講到這邊,大家對於機器學習有沒有一點初步的概念了呢?接下來,會開始介紹機器學習的相關工具,以及利用梯度下降法來實作機器學習!
我們明天見囉